/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.controller;

import com.persistencia.domain.Perfil;
import com.persistencia.domain.Perfilxopcionmenu;
import com.persistencia.domain.Persona;
import com.persistencia.domain.Personaxperfil;
import com.service.PerfilService;
import com.service.PerfilxOpcionMenuService;
import com.service.PersonaxPerfilService;
import com.service.impl.PerfilServiceImpl;
import com.service.impl.PerfilxOpcionMenuServiceImpl;
import com.service.impl.PersonaxPerfilServiceImpl;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import org.primefaces.model.DefaultTreeNode;
import org.primefaces.model.TreeNode;

/**
 *
 * @author kenny
 */
@ManagedBean
@SessionScoped
public class UsuarioController {

    /**
     * Creates a new instance of UsuariosController
     */
    private TreeNode root;
    private TreeNode[] nosdosSelecionados;
    PerfilxOpcionMenuService perfilxOpcionMenuService;
    Personaxperfil personaxperfil;
    PersonaxPerfilService personaxPerfilService;
    List<Personaxperfil> listapersonaxperfil;
    List<Perfilxopcionmenu> listaopcionesxperfil;
    Perfilxopcionmenu perfilxopcionmenu;
    String perfil="";
    PerfilService perfilService;
    List<Perfil> listaperfiles;
    
    
    Persona usuario;
    public UsuarioController() {
        try {
            usuario = (Persona)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("usuario");
            personaxPerfilService = new PersonaxPerfilServiceImpl();
            perfilxOpcionMenuService = new PerfilxOpcionMenuServiceImpl();
            listapersonaxperfil = personaxPerfilService.obtenerPersonaxPerfilxIdPersona(usuario.getNPrsId());
            listaopcionesxperfil = new ArrayList<Perfilxopcionmenu>();
            perfilxopcionmenu = new Perfilxopcionmenu();
            
            System.out.println("Descripcion personaxperfil perfil: "+listapersonaxperfil.get(0).getPerfil().getVDescripcion());
            System.out.println("Descripcion personaxperfil persona: "+listapersonaxperfil.get(0).getPersona().getVNombre());
            listaopcionesxperfil = perfilxOpcionMenuService.obtenerOpcionMenuxIdPerfil(listapersonaxperfil.get(0).getPerfil().getNPrfId());
            
            perfilService = new PerfilServiceImpl();     
            listaperfiles = new ArrayList<Perfil>();
            
            listaperfiles = perfilService.obtenerListaPerfiles();
            
            generarNodo();
            
            
            /*TreeNode node0 = new DefaultTreeNode("Node 0", root);  
            TreeNode node1 = new DefaultTreeNode("Node 1", root);  
            TreeNode node2 = new DefaultTreeNode("Node 2", root);  
              
            TreeNode node00 = new DefaultTreeNode("Node 0.0", node0);  
            TreeNode node01 = new DefaultTreeNode("Node 0.1", node0);*/
        } catch (Exception ex) {
            Logger.getLogger(UsuarioController.class.getName()).log(Level.SEVERE, null, ex);
        }
        
    }
    
    
    
    public void generarNodo(){
            root = new DefaultTreeNode("Root", null);
                for(int i=0; i<listaopcionesxperfil.size(); i++){
                    if(listaopcionesxperfil.get(i).getOpcionmenu().getNPadreId()==0){
                    TreeNode node0 = new DefaultTreeNode(listaopcionesxperfil.get(i), root); 
                    for(int j = 0; j<listaopcionesxperfil.size() ; j++){
                        if(listaopcionesxperfil.get(i).getOpcionmenu().getNOpcMnuId() == listaopcionesxperfil.get(j).getOpcionmenu().getNPadreId()){
                            TreeNode node00 = new DefaultTreeNode(listaopcionesxperfil.get(j), node0);
                            if(listaopcionesxperfil.get(j).getVEstado().equals("1")){
                                node00.setSelected(true);
                            }
                        }
                    }
                }
            }
    }
    
    public void consultaropcionesxperfil(){
        System.out.println("Entramos a consultar:"+perfil);
        listaopcionesxperfil = perfilxOpcionMenuService.obtenerOpcionMenuxIdPerfil(Integer.parseInt(perfil));
        generarNodo();
    }
    
    public String registraAccesosUsuario() {
        
        String url = null;
        try {


            //List<Integer> lsInt = new ArrayList<Integer>();
            
            if (nosdosSelecionados == null && nosdosSelecionados.length == 0) {
                //FacesUtils.showFacesMessage("Seleccione los permisos para el usuario", 1);
                FacesMessage msg = new FacesMessage("Seleccione los permisos para el usuario");
                FacesContext.getCurrentInstance().addMessage(null, msg);
                //url = "pretty:newperfil";
            } else {
                
                for(int i=0; i<listaopcionesxperfil.size(); i++){
                    if(listaopcionesxperfil.get(i).getOpcionmenu().getNPadreId()!=0){
                        perfilxopcionmenu=listaopcionesxperfil.get(i);
                        perfilxopcionmenu.setVEstado("0");
                        perfilxOpcionMenuService.actualizarPerfilxOpcionMenu(perfilxopcionmenu);
                    }
                }
                
                for (TreeNode no : nosdosSelecionados) {
                    if (no.isLeaf()) {
                        perfilxopcionmenu = (Perfilxopcionmenu)no.getData();
                        perfilxopcionmenu.setVEstado("1");
                        
                        System.out.println("Opcion seleccionado"+perfilxopcionmenu.getOpcionmenu().getVNombre() +"IdPerfil:"+perfilxopcionmenu.getPerfilxopcionmenuPK().getNPrfId()+"IdOpcion:"+perfilxopcionmenu.getPerfilxopcionmenuPK().getOpcMnuId());                     
                        perfilxOpcionMenuService.actualizarPerfilxOpcionMenu(perfilxopcionmenu);
                    }
                }
            }
            /*if (lsInt.size() > 0) {
                FacesMessage msg = new FacesMessage("Ocurrio un error durante la actualización de los accesos");
                FacesContext.getCurrentInstance().addMessage(null, msg);

            } else {
                FacesMessage msg = new FacesMessage("Error");
                FacesContext.getCurrentInstance().addMessage(null, msg);
            }*/
        } catch (Exception e) {
            FacesMessage msg = new FacesMessage("Error");
            FacesContext.getCurrentInstance().addMessage(null, msg);
            
            /*log.error(Constantes.errorMetodo + "registraAccesosUsuario" + e.getMessage());
            FacesUtils.showFacesMessage(Constantes.errorMetodo + "registraAccesosUsuario" + e.getMessage(), 1);*/
        } finally {
            return url;
        }
    }

    public Persona getUsuario() {
        return usuario;
    }

    public void setUsuario(Persona usuario) {
        this.usuario = usuario;
    }

    public TreeNode[] getNosdosSelecionados() {
        return nosdosSelecionados;
    }

    public void setNosdosSelecionados(TreeNode[] nosdosSelecionados) {
        this.nosdosSelecionados = nosdosSelecionados;
    }

    public TreeNode getRoot() {
        return root;
    }

    public void setRoot(TreeNode root) {
        this.root = root;
    }

    public String getPerfil() {
        return perfil;
    }

    public void setPerfil(String perfil) {
        this.perfil = perfil;
    }

    public List<Perfil> getListaperfiles() {
        return listaperfiles;
    }

    public void setListaperfiles(List<Perfil> listaperfiles) {
        this.listaperfiles = listaperfiles;
    }
    
    
    
      
}
